package org.ch02.test01.demo01;

import org.ch02.entity.Student;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 获取某个类的 Class 对象 - 方法一
 * Class.forName("包名.类名")
 *
 * 注意：此案例完全基于反射来实现类的操作 - 灵活性，拓展性
 *
 * @author lwj
 * @date 2025-03-17
 * @vesion 1.0.0
 */
public class MainTest02 {
    public static void main(String[] args) throws Exception{
        // 1.获取 Student 类的 Class 对象
        Class<?> clazz = Class.forName("org.ch02.entity.Student");

        // 在反射中，把类相关信息封装为相关的对象
        // 2.获取类的构造方法对象 - Constructor
        Constructor<?> constructor = clazz.getConstructor();

        // 3.实例化对象
        Object object = constructor.newInstance();

        // 4.获取方法对象
        // getMethod("方法名",方法参数的 Class 对象,...)
        Method method = clazz.getMethod("sayHello", String.class);

        // 5.调用方法 - 对象.invoke
        // 在 Method 对象中，提供了 invoke 方法，调用 Method 对象执向的方法
        // 语法：[Object obj = ]invoke("对象名称",实参列表,...)
        method.invoke(object,"张三");
    }
}
